Analisis exploratorio¶

Olist Store | E-Commerce Brasilero¶

Se trabajará sobre un dataset del e-commerce brasileño Olist Store.

Se tiene información de pedidos entre los años 2016 a 2018.

Los datos permiten analizar un pedido desde múltiples dimensiones: desde el estado del pedido, el precio, el pago y el rendimiento del proceso de entrega, los atributos del producto y finalmente las revisiones escritas por los clientes.

Se cuenta con un conjunto de datos de geolocalización que relaciona los códigos postales brasileños con las coordenadas latitud y longitud.

Ejemplo de un producto en la pagina de Olist

Explorando Clientes¶

Este conjunto de datos tiene información sobre el cliente y su ubicación. Usarlo para identificar clientes únicos en el dataset de pedidos/ordenes y para encontrar la ubicación de entrega de pedidos.

En este sistema, cada pedido se asigna a un cliente único. Esto significa que el mismo cliente obtendrá diferentes ID para diferentes pedidos. El propósito de tener un cliente_unique_id en el conjunto de datos es permitir identificar a los clientes que hicieron recompras en la tienda. De lo contrario, encontraría que cada pedido tiene un cliente diferente asociado.

La tabla de Clientes comprende las siguientes columnas:

customer_id: clave de la orden de compra del dataset. Cada orden tiene un unico customer_id.
customer_unique_id: Identificador unico del cliente.
customer_zip_code_prefix: Primeros cinco dígitos del código postal del cliente.
customer_city: Nombre de la ciudad del cliente.
customer_state: Nombre del estado donde se encuentra el cliente

In [6]:
info_clientes()
Se tiene un total de 99441 filas y 5 columnas
No se encuentran valores nulos
Out[6]:
customer_id customer_unique_id customer_zip_code_prefix customer_city customer_state
0 06b8999e2fba1a1fbc88172c00ba8bc7 861eff4711a542e4b93843c6dd7febb0 14409 franca SP
1 18955e83d337fd6b2def6b18a428ac77 290c77bc529b7ac935b93aa66c333dc3 9790 sao bernardo do campo SP
2 4e7b3e00288586ebd08712fdd0374a03 060e732b5b29e8181a18229c7b0b2b5e 1151 sao paulo SP
In [8]:
distribucion_clientes()
Se encuentran clientes de 4119 diferentes ciudades distribuidos en 27 estados de los cuales el 41.98 % se encuentra en Sao Paulo

Explorando Vendedores¶

Este dataset incluye datos sobre los vendedores que cumplieron los pedidos realizados en Olist. Usarlo para encontrar la ubicación del vendedor e identificar qué vendedor cumplió cada producto.

La tabla de Productos comprende las siguientes columnas:

seller_id:Identificador unico del vendedor.
seller_zip_code: Primeros 5 dígitos de código postal del vendedor.
seller_city: Nombre de la ciudad del vendedor.
seller_state: Nombre del estado donde vive el vendedor.

In [10]:
info_vendedores()
Se tiene un total de 3095 filas y 4 columnas
No se encuentran valores nulos
Out[10]:
seller_id seller_zip_code_prefix seller_city seller_state
0 3442f8959a84dea7ee197c632cb2df15 13023 campinas SP
1 d1b65fc7debc3361ea86b5f14c68d2e2 13844 mogi guacu SP
2 ce3ad9de960102d0677a81f5d0bb7b2d 20031 rio de janeiro RJ
In [12]:
grafico_vendedores()
El 59.74% de los vendedores se encuentran en SP (Sao Pablo) y el resto se encuentran distribuidos en los demas 22 estados

Explorando Geolocalizacion¶

Este conjunto de datos tiene información con códigos postales brasileños y sus coordenadas LAT/LONG. Usarlo para trazar mapas y encontrar distancias entre vendedores y clientes.

La tabla de Geolocalizacion comprende las siguientes columnas:

geolocation_zip_code_prefix: Primeros cinco dígitos del código postal del cliente
geolocation_lat: latidud
geolocation_lng: Longitud
geolocation_city: Ciudad
geolocation_state: Estado

In [14]:
info_geolocalizacion()
Se tiene un total de 1000163 filas y 5 columnas
No se encuentran valores nulos
Out[14]:
geolocation_zip_code_prefix geolocation_lat geolocation_lng geolocation_city geolocation_state
0 1037 -23.545621 -46.639292 sao paulo SP
1 1046 -23.546081 -46.644820 sao paulo SP
2 1046 -23.546129 -46.642951 sao paulo SP
Chequeamos Outliers.¶

La mayor parte del país se halla dentro del hemisferio sur, entre los paralelos 5.5 de latitud N, y los -34 de latitud S; y entre los meridianos que señalan los -32 y los -74 de longitud.

In [16]:
outiers_geo()
Luego del analisis se encontraron 31 Outliers

Normalizamos la tabla Geolocalizacion corrigiendo los outliers con Geopy para luego graficar el mapa de clientes

In [20]:
clientes = clientes_etl(clientes)
In [21]:
geoloc_filtrado.head()
Out[21]:
Id_Geolocalizacion zip_code_prefix Latitud Longitud Ciudad Estado
0 0 1001 -23.550190 -46.634024 sao paulo SP
1 1 1002 -23.548146 -46.634979 sao paulo SP
2 2 1003 -23.548994 -46.635731 sao paulo SP
3 3 1004 -23.549799 -46.634757 sao paulo SP
4 4 1005 -23.549456 -46.636733 sao paulo SP
In [55]:
map_customers()
mapCustomers
¿De dónde están los clientes activos?: 
Out[55]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [ ]:
 

Explorando Items¶

Este dataset incluye datos sobre los elementos comprados dentro de cada pedido.

La tabla de Items comprende las siguientes columnas:

order_id: Identificador unico de la orden de compra.
order_item_id: número secuencial de identificación de elementos incluidos en la misma orden.
product_id: Identificador unico del producto
seller_id: Identificador unico del vendedor
shipping_limit_date: Muestra la fecha de límite de envío del vendedor para manejar el pedido con el socio logístico.
price: Precio del item.
freight_value: valor de flete (si un pedido tiene más de un elemento, el valor del flete se divide entre los elementos)

In [26]:
info_items()
Se tiene un total de 112650 filas y 7 columnas
No se encuentran valores nulos
Out[26]:
order_id order_item_id product_id seller_id shipping_limit_date price freight_value
0 00010242fe8c5a6d1ba2dd792cb16214 1 4244733e06e7ecb4970a6e2683c13e61 48436dade18ac8b2bce089ec2a041202 2017-09-19 09:45:35 58.9 13.29
1 00018f77f2f0320c557190d7a144bdd3 1 e5f2d52b802189ee658865ca93d83a8f dd7ddc04e1b6c2c614352b383efe2d36 2017-05-03 11:05:13 239.9 19.93
2 000229ec398224ef6ca0657da4fc703e 1 c777355d18b72b67abbeef9df44fd0fd 5b51032eddd242adc84c38acab88f23d 2018-01-18 14:48:30 199.0 17.87
In [28]:
grafico_items()
El 75% de los precios esta por debajo de R$134.90

Explorando Medio de pago¶

Este dataset incluye datos sobre las opciones de pago de los pedidos.

La tabla de Metodo de Pago comprende las siguientes columnas:

order_id: Identificador unico de la orden de compra.
payment_sequential: Un cliente puede pagar un pedido con más de un método de pago. Si lo hace, se creará una secuencia.
payment_type: Metodo de pago elegido por el cliente
payment_installments: Número de cuotas elegidas por el cliente.
payment_value: valor de la transacción.

In [32]:
info_metodo_de_pago()
Se tiene un total de 103886 filas y 5 columnas
No se encuentran valores nulos
Out[32]:
order_id payment_sequential payment_type payment_installments payment_value
0 b81ef226f3fe1789b1e8b2acac839d17 1 credit_card 8 99.33
1 a9810da82917af2d9aefd1278f1dcfa0 1 credit_card 1 24.39
2 25e8ea4e93396b6fa0d3dd708e76c1bd 1 credit_card 1 65.71
In [34]:
grafico_medio_de_pago()
In [36]:
grafico_cuotas()
El 75% de los clientes pago en 4 cuotas o menos y la mayoria de los clientes prefieren pagar en una cuota (el 50.5%)

Explorando Revisiones de los clientes¶

Después de que un cliente compra el producto en Olist Store, se notifica al vendedor para cumplir ese pedido. Una vez que el cliente recibe el producto, o la fecha de entrega estimada, el cliente recibe una encuesta de satisfacción por correo electrónico donde puede dar una nota para la experiencia de compra y escribir algunos comentarios.

La tabla de Reviews comprende las siguientes columnas:

review_id: Identificador unico de la revision.
order_id: Identificador unico de la orden de compra.
review_score: Nota que varía de 1 a 5 dada por el cliente en una encuesta de satisfacción.
review_comment_title: Título de comentario de la revisión dejada por el cliente, en portugués.
review_comment_message: Mensaje de comentario de la revisión dejada por el cliente, en portugués.
review_creation_date: Muestra la fecha en que se envió la encuesta de satisfacción al cliente.
review_answer_timestamp: Muestra dia y hora de la encuesta de satisfacción.

In [39]:
info_reviews()
Se tiene un total de 99224 filas y 7 columnas
Out[39]:
review_id order_id review_score review_comment_title review_comment_message review_creation_date review_answer_timestamp
0 7bc2406110b926393aa56f80a40eba40 73fc7af87114b39712e6da79b0a377eb 4 NaN NaN 2018-01-18 2018-01-18 21:46:59
1 80e641a11e56f04c1ad469d5645fdfde a548910a1c6147796b98fdf73dbeba33 5 NaN NaN 2018-03-10 2018-03-11 03:05:13
2 228ce5500dc1d8e020d8d1322874b6f0 f9e4b658b201a9f2ecdecbb34bed034b 5 NaN NaN 2018-02-17 2018-02-18 14:36:24

Aqui nos encontramos valores nulos en el mensaje de las revisiones y en el titulo de la revision. Pero el score de la revision no tiene nulos. Es un valor numerico entre 1 y 5

In [41]:
grafico_reviws()
El 57.78% de las revisiones corresponden a 5 y el 11.51% a 1

Explorando Ordenes de compra¶

Este es el conjunto de datos principal. De cada pedido se puede encontrar toda la otra información.

La tabla de ordenes comprende las siguientes columnas:

order_id: Identificador unico del orden de compra
customer_id: clave de la orden de compra. Cada orden tiene un unico customer_id.
order_status: Referencia del estado de la orden (entregada, enviada, etc).
order_purchase_timestamp: Muestra dia y hora de la compra.
order_approved_at: Muestra dia y hora del pago aprobado
order_delivered_carrier_date: Muestra fecha y hora de entregado el pedido al transportista.
order_delivered_customer_date: Muestra la fecha real de entrega del pedido al cliente.
order_estimated_delivery_date: Muestra la fecha de entrega estimada que se informó al cliente en el momento de compra.

In [43]:
info_ordenes()
Se tiene un total de 99441 filas y 8 columnas
Out[43]:
order_id customer_id order_status order_purchase_timestamp order_approved_at order_delivered_carrier_date order_delivered_customer_date order_estimated_delivery_date
0 e481f51cbdc54678b7cc49136f2d6af7 9ef432eb6251297304e76186b10a928d delivered 2017-10-02 10:56:33 2017-10-02 11:07:15 2017-10-04 19:55:00 2017-10-10 21:25:13 2017-10-18
1 53cdb2fc8bc7dce0b6741e2150273451 b0830fb4747a6c6d20dea0b8c802d7ef delivered 2018-07-24 20:41:37 2018-07-26 03:24:27 2018-07-26 14:31:00 2018-08-07 15:27:45 2018-08-13
2 47770eb9100c2d0c44946d9cf07ec65d 41ce2a54c0b03bf3443c3d931a367089 delivered 2018-08-08 08:38:49 2018-08-08 08:55:23 2018-08-08 13:50:00 2018-08-17 18:06:29 2018-09-04

Encontramos algunos valores nulos en order_approved_at, order_delivered_carrier_date, order_delivered_customer_date

Evaluar las diferencias entre:

  • Hora de compra y pago aprobado
  • pago aprobado y despacho
  • decpacho y entrega
  • entrega real y entrega pactada
In [53]:
diferencias()
La diferencia entre la compra y el pago aprobado es de 0 dias y 10 minutos
La diferencia entre el pago aprobado y el despacho es de 2 dias y 19 minutos
La diferencia entre el despacho y la entrega es de 9 dias y 7 minutos
La diferencia entre la entrega real y la entrega pactada es de 11 dias y 4 minutos

Explorando Productos¶

Este dataset incluye datos sobre los productos vendidos por Olist.

La tabla de Productos comprende las siguientes columnas:

product_id: Identificador unico del producto.
product_category_name: Nombre de la categoria del producto, en portugués.
product_name_length: Número de caracteres extraídos del nombre del producto.
product_description_lenght: Número de caracteres extraídos de la descripción del producto.
product_photos_qty: Número de fotos publicadas por el producto.
product_weight_g: Peso del producto medido en gramos.
product_length_cm: Longitud del producto medida en centímetros.
product height_cm: Altura del producto medida en centímetros.
product_width_cm: Ancho del producto medido en centímetros.

In [48]:
info_productos()
Se tiene un total de 32951 filas y 9 columnas
Out[48]:
product_id product_category_name product_name_lenght product_description_lenght product_photos_qty product_weight_g product_length_cm product_height_cm product_width_cm
0 1e9e8ef04dbcff4541ed26657ea517e5 perfumaria 40.0 287.0 1.0 225.0 16.0 10.0 14.0
1 3aa071139cb16b67ca9e5dea641aaa2f artes 44.0 276.0 1.0 1000.0 30.0 18.0 20.0
2 96bd76ec8810374ed1b65e291975717f esporte_lazer 46.0 250.0 1.0 154.0 18.0 9.0 15.0

Se encuentran valores nulos en product_category_name, product_name_lenghty product_description_lenght

Explorando Productos_info¶

Este dataset traduce las categorias de los productos al inglés. Evaluar si lo necesitamos en español. Usar la api de google translate para eso.

La tabla de Productos_info comprende las siguientes columnas:

product_category_name: Nombre de categoría en portugués. product_name_english: Nombre de categoría en inglés.

In [50]:
info_productos_info()
Se tiene un total de 71 filas y 2 columnas
No se encuentran valores nulos
Out[50]:
product_category_name product_category_name_english
0 beleza_saude health_beauty
1 informatica_acessorios computers_accessories
2 automotivo auto